using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 泛型单例基类，适用于需要单例模式的普通管理类（非MonoBehaviour）
/// 使用方法：BaseManager<YourClass>.GetInstance()
/// </summary>
public class BaseManager<T> where T : new()
{
    // 静态字段，用于保存单例实例，保证全局唯一
    private static T _instance;

    /// <summary>
    /// 获取当前类型T的单例对象。如果不存在则自动创建
    /// </summary>
    /// <returns>T的唯一实例</returns>
    public static T GetInstance()
    {
        // 如果还没有创建实例，则创建一个
        if (_instance == null)
        {
            _instance = new T(); // 通过无参构造函数创建实例
        }
        // 返回当前实例
        return _instance;
    }
}

// 适用场景：
// 1. 需要全局唯一实例的管理器类，例如：GameManager、AudioManager、ConfigManager等。
// 2. T类型必须有无参构造函数（即不能用于继承自MonoBehaviour的类）。
// 3. 此代码不是线程安全的，适用于Unity大多数主线程场景。
// 4. 使用方法示例：
//      GameManager gm = BaseManager<GameManager>.GetInstance();
//      gm.Init();
